var Acl = function () {
    var rest = new Rest();
    var formUtil=new FormProceUtil();
    var exports = {};
    exports.options = {};
    exports.options.ParentId = $("#aclId").val();
    var basUrl="/after/acl/";
    /**
     *
     * ACL_ADDPAGE 权限跳转页面
     * TABLE_LIST_JSON 权限列表
     * ACL_PARENT_TREE  上级菜单列表
     * @type {string}
     *
     * @type {{ACL_ADDPAGE: string, TABLE_LIST_JSON: string, ACL_PARENT_TREEl: string}}
     */
    var PathEnume={
        ACL_ADDPAGE:basUrl+"aclAdd.html",
        ACL_EDITPAGE:basUrl+"aclEdit.html",
        TABLE_LIST_JSON:basUrl+"listAcl.json",
        ACL_PARENT_TREE:basUrl+"aclParentTree.json",
        SAVE_ACL:basUrl+"saveAcl.json",
        DELETE_ACL:basUrl+"deleteAcl.json",
        GET_ID_ACL:basUrl+"getIdAcl.json",
        UPDATE_ACL:basUrl+"updateAcl.json"
    }


    exports.Init=function(){
        //初始化表格
        exports.tableInit();
        //switch按钮初始化
        exports.refreshSwitch();
        //添加按钮绑定事件
        $("#add").click(function(){
            exports.bthAddPage(exports.saveAcl);
        });
        //删除按钮绑定事件
        $("#remove").click(function(){
            exports.removeBatchIdAcl();
        });
    }
    exports.AddInit = function(){
        exports.aclParentTree();
        //switch按钮初始化
        exports.refreshSwitch();
        exports.InitValidator();
        //初始化上级树
        $("#aclParentId").select2tree();
        //如果是更新页面 初始化页面数据
        if ($("#aclId").val()){
            var id= $("#aclId").val()
            var params = {"id":id};
            rest.getContTypeJson(PathEnume.GET_ID_ACL,params,true,function (data) {
                formUtil.setWebControls(data.data);
            });
        }
    }
    /**
     * 加载表格
     */
    exports.tableInit = function () {
        $('#table').bootstrapTable({
            url: PathEnume.TABLE_LIST_JSON,         //请求后台的URL（*）
            method: 'GET',                      //请求方式（*）
            toolbar: '#toolbar',                //工具按钮用哪个容器
            striped: true,                      //是否显示行间隔色
            cache: false,                       //是否使用缓存，默认为true，所以一般情况下需要设置一下这个属性（*）
            pagination: false,                   //是否显示分页（*）
            sortable: true,                     //是否启用排序
            sortOrder: "asc",                   //排序方式
            queryParamsType:'',
            sidePagination: "server",           //分页方式：client客户端分页，server服务端分页（*）
            pageNumber:1,                       //初始化加载第一页，默认第一页
            strictSearch: false,
            clickToSelect: false,                //是否启用点击选中行
            //height: 460,                        //行高，如果没有设置height属性，表格自动根据记录条数觉得表格高度
            uniqueId: "aclId",                     //每一行的唯一标识，一般为主键列
            cardView: false,                    //是否显示详细视图
            detailView: false,                   //是否显示父子表
            showHeader:true,                   //隐藏标题头
            search:true,
            showColumns:true,                   //是否显示 内容列下拉框
            showRefresh:true,                   //是否显示 刷新按钮
            //showToggle:true,                    //是否显示 切换试图（table/card）按钮
            //showPaginationSwitch:true,          //是否显示 数据条数选择框
            checkboxHeader:true,
            searchText:'',
            rowStyle:function(row, index) {
                if (row.aclParentId=="0"){
                    return {
                        classes: "treegrid-"+row.aclId
                    };
                }else {
                    return {classes:"treegrid-"+row.aclId+" "+"treegrid-parent-"+row.aclParentId};
                }
            },onLoadSuccess: function(){  //加载成功时执行
                //初始化表格树 默认展开全部页面
                $('#table').treegrid({
                    treeColumn: 1,
                }).treegrid('expandAll');
                exports.refreshSwitch();
            },
            formatSearch: function () {
                return '权限名称';
            },
            columns: [{
                checkbox:true
            },{
                field: 'aclId',
                title: '权限ID',
                visible:false
            },{
                field: 'aclParentId',
                title: '上级权限ID',
                visible:false
            },{
                field: 'aclName',
                title: '权限名称',
            },{
                field: 'aclCode',
                title: '权限编码',
                align: 'center'
            },{
                field: 'icon',
                title: '图标',
                align: 'center'
            }, {
                field: 'type',
                align: 'center',
                title: '权限类型',
                formatter:function (value,row, index) {
                    if(value=="0"){
                        return "菜单面板"
                    }
                    if(value=="1"){
                        return "菜单"
                    }
                    if(value=="2"){
                        return "功能面板"
                    }
                    if(value=="3"){
                        return "功能"
                    }
                }
            }, {
                field: 'seq',
                align: 'center',
                title: '权限顺序',
                sortable: true
            },{
                field: 'isStatus',
                align: 'center',
                title: '权限状态',
                formatter :exports.formatAclStatus
            },{
                field: 'url',
                align: 'center',
                title: '资源路径'
            },{
                field: 'remark',
                align: 'center',
                title: '资源描述',
                visible:false
            },{
                field: 'operateTime',
                align: 'center',
                title: '更新时间'
            },{
                field: 'operate',
                title: '操作',
                align: 'center',
                formatter: exports.operateFormatter
            }]
        });
    }

    /**
     * 添加页面跳转方法
     */
    exports.bthAddPage = function (callback) {
        top.layer.open({
            id:'addAcl',
            type: 2,
            title: '添加权限',
            btn: ['添加', '关闭'],
            maxmin: false, //最大最小化
            shadeClose: false, //点击遮罩关闭层
            area : ['720px' , '550px'],
            content: PathEnume.ACL_ADDPAGE,
            yes: callback,
            btn2: function(index, layero){
                layer.close(index);
                return;
            },end:function () {
                exports.refreshTable();
            }
        });
    }
    /**
     * 添加页面跳转方法
     */
    exports.bthEditPage = function (id,callback) {
        top.layer.open({
            id:'editAcl',
            type: 2,
            title: '更新权限',
            btn: ['更新', '关闭'],
            maxmin: false, //最大最小化
            shadeClose: false, //点击遮罩关闭层
            area : ['720px' , '550px'],
            content: PathEnume.ACL_EDITPAGE+"?aclId="+id,
            yes: callback,
            btn2: function(index, layero){
                layer.close(index);
                return;
            },end:function () {
                exports.refreshTable();
            }
        });
    }

    /**
     * 批量删除
     */
    exports.removeBatchIdAcl= function(){
        var ids=exports.getSelectionsIds();
        var names=exports.getAclNames();
        exports.removeIdAcl(ids,names);
    }
    /**
     * 删除方法
     */
    exports.removeIdAcl = function(ids,names){
        if(ids.length == 0){
            layer.msg("请选择要删除的数据", {
                icon: 2,
                time: 2000 //2秒关闭（如果不配置，默认是3秒）
            });
            return ;
        }

        layer.confirm('确定要删除,<span style="color: red">'+names+'</span>吗?', function(index){
            var params = {"ids":ids};
            rest.getContTypeJson(PathEnume.DELETE_ACL,params,true,function (data) {
                exports.refreshTable();
                if (data.ret==true){
                    layer.msg("删除数据成功",{
                        icon: 1,
                        time: 1500 //2秒关闭（如果不配置，默认是3秒）
                    })
                    return;
                }else{
                    layer.msg("删除数据失败",{
                        icon: 2,
                        time: 1500 //2秒关闭（如果不配置，默认是3秒）
                    })
                    return;
                }
            });
            layer.close(index);
        });
    }

    /**
     * 获取checkbox 选择的权限id数组
     * @returns {Array}
     */
    exports.getSelectionsIds = function (){
        var sels = $('#table').bootstrapTable('getSelections');
        var ids = [];
        for(var i in sels){
            ids.push(sels[i].aclId);
        }
        ids = ids.join(",");
        return ids;
    }

    /**
     * 获取checkbox 选择的权限名数组
     * @returns {Array}
     */
    exports.getAclNames = function (){
        var sels = $('#table').bootstrapTable('getSelections');
        var ids = [];
        for(var i in sels){
            ids.push(sels[i].aclName);
        }
        ids = ids.join(",");
        return ids;
    }
    /**
     * 上级菜单列表
     */
    exports.aclParentTree = function () {
        rest.getContTypeJson(PathEnume.ACL_PARENT_TREE,null,true,function (data) {
            var tree=$("#aclParentId").html();
            tree+="<option value='0'>=====未选择=====</option>";
            $.each(data.data,function (index,item) {
                if(item.aclParentId=="0"){
                    tree+="<option value="+item.aclId+">"+item.aclName+"</option>";
                }else{
                    tree+="<option value="+item.aclId+" parent="+item.aclParentId+">"+item.aclName+"</option>";
                }
            })
            $("#aclParentId").html(tree);
        });
    }

    /**
     * 保存数据到数据库
     * @param index
     * @param layero
     */
    exports.saveAcl = function(index, layero){
        var iframeWin = top.window[layero.find('iframe')[0]['name']];
        var acl=new iframeWin.Acl;
        if(acl.validate()){
            var postData=acl.getFromData();
            if (acl.options.ParentId){
                rest.postTypeUrlencNotCallback(PathEnume.UPDATE_ACL,postData,true,index)
            }else {
                rest.postTypeUrlencNotCallback(PathEnume.SAVE_ACL,postData,true,index)
            }
        }else {
            layer.close(index);
        }
    }
    /**
     * table 表格刷新
     */
    exports.refreshTable=function() {
        $('#table').bootstrapTable('refresh');
    }

    /**
     * 获取数据
     */
    exports.getFromData=function() {
       return formUtil.getWebControls();
    }
    /**
     * 初始化校验
     * @constructor
     */
    exports.InitValidator= function(){
        $('#form').bootstrapValidator({
            message: '这个值无效',
            feedbackIcons: {/*input状态样式图片*/
                valid: 'glyphicon glyphicon-ok',
                invalid: 'glyphicon glyphicon-remove',
                validating: 'glyphicon glyphicon-refresh'
            },
            fields: {/*验证：规则*/
                aclName: {//验证input项：验证规则
                    message: 'The username is not valid',
                    validators: {
                        notEmpty: {//非空验证：提示消息
                            message: '名称不能为空'
                        }
                    }
                },
                type: {//验证input项：验证规则
                    message: 'The username is not valid',
                    validators: {
                        notEmpty: {//非空验证：提示消息
                            message: '类型不能为空'
                        },
                        callback: {
                            message: 'Wrong answer',
                            callback: function (value, validator, $field) {
                                $("#url").attr("disabled",false);
                                if(value=="0"||value=="2"){
                                    $('#form').bootstrapValidator('updateStatus', "url", 'NOT_VALIDATED');
                                    $("#url").val("");
                                    $("#url").attr("disabled",true);
                                }
                                return true;
                            }
                        }
                    }
                },
                /*icon: {//验证input项：验证规则
                    message: 'The username is not valid',
                    trigger:"change",
                    validators: {
                        notEmpty: {//非空验证：提示消息
                            message: '图标不能为空'
                        }
                    }
                },*/
                seq: {//验证input项：验证规则
                    message: 'The username is not valid',

                    validators: {
                        notEmpty: {//非空验证：提示消息
                            message: '顺序不能为空'
                        },
                        regexp: {
                            regexp: /^[0-9]*$/,
                            message: '请输入数字'
                        }
                    }

                },
                url: {//验证input项：验证规则
                    message: 'The username is not valid',
                    trigger:"change",
                    validators: {
                        notEmpty: {//非空验证：提示消息
                            message: '路径不能为空'
                        }
                    }
                },
                aclCode: {//验证input项：验证规则
                    message: 'The username is not valid',
                    trigger:"change",
                    validators: {
                        notEmpty: {//非空验证：提示消息
                            message: '权限编码不能为空'
                        }
                    }
                }
            }
        })
    }
    /**
     * 校验参数必输项
     * @returns {*|Boolean}
     */
    exports.validate=function () {
        var bootstrapValidator = $('#form').data('bootstrapValidator');
        //进行验证
        bootstrapValidator.validate();
        return bootstrapValidator.isValid();
    }

    /**
     * 刷新switch开关的方法
     */
    exports.refreshSwitch=function () {
        $('.isStatus').bootstrapSwitch({
            onText:"开启",
            offText:"关闭",
            onColor:"success",
            offColor:"info",
            size:"small"
        })
    }

    /**
     * 表格状态格式化
     */
    exports.formatAclStatus = function(value, row, index){
        if(value=="0"){
            return "<input name='status'  class='isStatus' type='checkbox' data-size='small'>"
        }
        if(value=="1"){
            return "<input name='status' class='isStatus' type='checkbox'  checked='checked'  data-size='small'>"
        }
    }

    exports.operateFormatter=function(value, row, index) {
        return [
            "<button type='button' class='btn btn-info btn-sm' style='margin-right:15px;' onclick=Acl().bthEditPage('"+row.aclId+"',Acl().saveAcl);>编辑</button>",
            "<button type='button' class='btn btn-warning btn-sm' style='margin-right:15px;' onclick=Acl().removeIdAcl('"+row.aclId+"','"+row.aclName+"');>删除</button>"
        ].join('');
    }

    exports.formatDateTime=function(value, row, index){
        var now = new Date(value);
        return now.format("yyyy-MM-dd hh:mm:ss");
    }

    exports.formatAclIcon=function(value, row, index){
        return "<i class='"+value+"'></i>";
    }

    return exports;
};